home *** CD-ROM | disk | FTP | other *** search
Modula Definition | 1997-10-26 | 9.4 KB | 229 lines |
- DEFINITION MODULE dataSys;
-
- (*==============================================================*
- * Modul: CAT-Datenbank, Strukurdefinition *
- * Autor: Johannes Gttker-Schnetmann *
- * erstellt am: 11.10.1992 *
- * letzte nderung am: 12.08.1992 *
- * Version: 1.2 *
- * Interne Version: V#0002 *
- *==============================================================*
-
- Definition der Strukturen in der Cat-Datenbank. Hier, damit man
- auch von CatPutz aus bequem an diese Definitionen kommt.
-
- *----------------------------------------------------------------------------
- * Datum Vers. Autor nderung (Arbeitsbericht)
- *----------------------------------------------------------------------------
- * 11.10.92 0001 JGS Erste Version
- * 22.12.92 0002 JGS grPosType hierhin, kann nun auch direkt nach CatPutz
- * importiert werden.
- * 12.08.93 JGS Zwei weitere Flags eingefhrt.
- *----------------------------------------------------------------------------
- *)
-
- FROM SYSTEM IMPORT TSIZE;
-
- (* Verlagert von data nach hier, fr CatPutz! *)
-
- CONST private = 0;
- empty = 0FFFFH;
- notSaved = 0FFFEH;
-
- personalName = 'Persnliche';
-
- CONST bGelesen = 0; bFiltered = 1; bInteressant = 2; bTeilloeschung = 3;
- bTotalloeschung = 4; bKommentieren = 5; bAntworten = 6; bUser1 = 7;
- bUser2 = 8; bVererben = 9; (* bFiltered = 10; *)
- (* Statusbits einer Msg *)
- bComToOwnMessage = 10;
-
- (* Vorlufig bis bei der Maus die Message-Ids diesen Namen auch verdienen: *)
- bOldDupe = 15;
-
- (* Neu, eigene Messages werden gekennzeichnet *)
- bOwnMessage = 14;
- bOldComToOwnMessage = 13;
- (* da einige Betaversionen das so hatten, wird in einer bergangsphase beides *)
- (* erkannt und ggf. 13 entfernt und dafr 10 gesetzt *)
-
- CONST maxGroup = 65534;
-
- (* Header fr gruppen.pos und *.par *)
- TYPE FileHeaderType = RECORD
- CatMagic : LONGCARD;
- Version : CARDINAL;
- VersionMagic : CARDINAL;
- END;
-
- CONST dbHeaderLength = TSIZE(FileHeaderType);
-
- dbCatMagic = 43415420H; (* "CAT " *)
- dbVersion = 1; (* Versionsnummer der data.i *)
- dbVersionMagic = 0123H; (* Versionsmagic *)
- grPosVersionMagic = 0124H; (* Versionsmagic *)
-
- standardHeader = FileHeaderType {dbCatMagic, dbVersion, dbVersionMagic};
-
- (*--------------------------------------------------------------------
- Cat-Version Magic Bemerkungen
- 0001 0123H Erste Version der neuen Datenbank
- --------------------------------------------------------------------*)
-
- TYPE posType = (aktuellePos, neuePos, letztePos, unreadPos, unreadCount);
- onePos = ARRAY posType OF CARDINAL;
- grPosType =
- RECORD
- head : FileHeaderType;
- save : onePos;
- pos : POINTER TO ARRAY[0..maxGroup] OF onePos;
- posGroups : CARDINAL;
- usedGroups: CARDINAL;
- END;
-
- CONST mVon = 0; mAn = 1; mMId = 2;
- mRId = 3; mBox = 4; mName = 5;
- mRefNr = 6; mDistribution = 7;
- mGate = 8; mMime = 9; mFollowup = 10;
- mReplyTo = 11; mSender = 12;
-
-
- mUnknown = 14; mPrivateBytes = 15;
- (* BITS in items *)
-
- (*-------------------------------------------------------------------------------
- Achtung, es ist wichtig, da die crc an erster Stelle steht und zwei Bytes
- lang ist, davon geht data.i an mehreren Stellen aus. Auerdem mu der
- dupeInfoType auf den pBlock passen!
- --------------------------------------------------------------------------------*)
-
- (*-- Aus Redundanzgrnden doppelt gespeicherte Information --*)
- TYPE dupeInfoPtr = POINTER TO dupeInfoType;
-
- TYPE dupeInfoType = RECORD
- Datum : LONGCARD; (* Datum im Maustauschformat *)
- items : BITSET; (* In der DAT vorhandene Dinge, *)
- (* in der Reihenfolge wie oben angegeben *)
- bits : BITSET;
- hLength : CARDINAL; (* Lnge des MessageHeaders *)
- idLength : CARDINAL; (* ID-Lnge im Header *)
- Length : CARDINAL; (* Lnge der Mitteilung *)
- Start : LONGCARD; (* Offset in der Datendatei *)
- (*-- Bis hier genau wie in pBlock --*)
- setTerminator : CARDINAL; (* beendet den Datensatz *)
- END;
-
- CONST Terminator = 0AA00H;
- (* Kommt nach meinen Tests recht selten vor und ergibt damit einen gewissen Anhaltspunkt *)
-
- (*-- Parameterblock fr die Parameterfiles --*)
- TYPE pBlockPtr = POINTER TO pBlock;
-
- TYPE pBlock =
- RECORD
- crc : CARDINAL; (* crc ber den Rest des Parameterblocks *)
- Datum : LONGCARD; (* Datum im Maustauschformat *)
- items : BITSET; (* In der DAT vorhandene Dinge, *)
- (* in der Reihenfolge wie oben angegeben *)
- bits : BITSET;
- hLength : CARDINAL; (* Lnge des MessageHeaders *)
- idLength : CARDINAL; (* ID-Lnge im Header *)
- Length : CARDINAL; (* Lnge der Mitteilung *)
- Start : LONGCARD; (* Offset in der Datendatei *)
- upMess : CARDINAL;
- downMess : CARDINAL;
- rightMess : CARDINAL;
- leftMess : CARDINAL;
- KomCount : CARDINAL;
- END; (* 30 Byte *)
-
- (*-- Bei persnlichen Msgs zustzlich gespeicherte Infos --*)
- TYPE pInfoPtr = POINTER TO pInfoType;
-
- TYPE pInfoType = RECORD
- LeseDatum : LONGCARD;
- Status,
- locked : CHAR; (* wenn # 0 dann Status nicht vom User nderbar *)
- END;
-
-
- (*--------------------------------------------------------------------
- Neuer Aufbau eines *.DAT-Eintrages:
- +=========================+ \
- | Header, max. 16kB | |
- | | \ Erluterung unten
- | | / Lnge in "hLength"
- | | |
- / +=========================+ /
- Gesamt-| | Messagetext, max 64kB | Messagetext, Strings, die mit lf getrennt
- Lnge < | | sind. Demnchst einmal noch nullterminiert
- in | | | am Ende.
- Length \ +=========================+ \
- | long Datum | |
- +-------------------------+ |
- | word items | |
- +-------------------------+ \ Aus Redundanzgrnden
- | word bits | / nochmal hier; fr Reparaturzwecke;
- +-------------------------+ | dieselben Werte, wie in pBlock
- | word strLength | |
- +-------------------------+ |
- | word Length | |
- +-------------------------+ /
-
-
-
- In Header steht:
- +-------------------------+
- | Message-ID | Lnge in idLength, sicher vorhanden
- +=========================+ <- Ein Byte eingeschoben, falls idLength ungerade ist
- | Anzahl der Eintrge | Anzahl der noch folgenden Strings
- +-------------------------+
- | Lnge Eintrag # 1 | Lnge von String Nummer 1 (Betreff)
- +-------------------------+
- . .
- . .
- +-------------------------+
- | Lnge Eintrag # n |
- +=========================+
- | Betreff | sicher vorhanden
- +=========================+
- | Absender | wahrscheinlich vorhanden
- +-------------------------+
- | Empfnger | sporadisch vorhanden
- +-------------------------+
- | MID | Message-ID bei Messages ber ein Gateway
- +-------------------------+
- | RID | Kommentar-ID bei Messages ber ein Gateway
- +-------------------------+
- | BOX | Hinweise auf Absenderbox
- +-------------------------+
- | Name | Name des Absenders, falls nicht gleich "Absender"
- +=========================+
- | Weitere Textinformation | Strings der Maus, die Cat noch nicht kennt
- +=========================+
- | private-Bytes | Statusdatum, locked, Status
- +-------------------------+
-
- Bis auf die beiden letzten Eintrge sind alle Eintrge nullterminierte
- Strings und nur vorhanden, wenn in "items" angegeben. Die Reihenfolge gem
- "items" wird eingehalten.
-
- Also einmal mit Hausnummern:
- items = 00000000 00101101 = 2D hex heit, da es auer der Message-ID und
- dem Betreff noch einen Absender, eine Gateway-Message-ID, eine Kommentar-ID
- und eine Namensangabe in dieser Reihenfolge im Header gibt.
-
- In der Sparte "Weiter Textinformation" stehen Informationen, die von
- der Maus geliefert werden, aber die Cat noch nicht kennt. Es handelt sich
- dabei um eine Liste nullterminierter Strings, die mit einem leeren
- String beendet wird. Der erste Buchstabe der Strings entspricht dem
- vom MausTausch-Protokoll bergebenen.
-
- private-Bytes enthlt die bisherige Sonderinfo aus dem Parameterblock bei
- persnlichen Msgs. Der Eintrag ist immer 6 Bytes lang und folgendermaen
- aufgebaut:
-
- ----------------------------------------------------------------------*)
-
- END dataSys.
-